From 788dfe89e1aae7f1958606d8af109652d53692f5 Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Sat, 7 Jan 2012 11:11:51 -0500 Subject: [PATCH] core: Ensure we abort transaction if we fail in the middle Otherwise we could leave a lot of temp files lying around. --- src/ostree/ot-builtin-commit.c | 11 +++++++++++ src/ostree/ot-builtin-compose.c | 12 ++++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/ostree/ot-builtin-commit.c b/src/ostree/ot-builtin-commit.c index 8b791189..be58f195 100644 --- a/src/ostree/ot-builtin-commit.c +++ b/src/ostree/ot-builtin-commit.c @@ -81,6 +81,7 @@ ostree_builtin_commit (int argc, char **argv, GFile *repo_path, GError **error) GVariantBuilder metadata_builder; gboolean metadata_builder_initialized = FALSE; gboolean skip_commit = FALSE; + gboolean in_transaction = FALSE; context = g_option_context_new ("[ARG] - Commit a new revision"); g_option_context_add_main_entries (context, options, NULL); @@ -180,6 +181,8 @@ ostree_builtin_commit (int argc, char **argv, GFile *repo_path, GError **error) if (!ostree_repo_prepare_transaction (repo, cancellable, error)) goto out; + in_transaction = TRUE; + mtree = ostree_mutable_tree_new (); if (argc == 1 && (trees == NULL || trees[0] == NULL)) @@ -282,6 +285,8 @@ ostree_builtin_commit (int argc, char **argv, GFile *repo_path, GError **error) if (!ostree_repo_commit_transaction (repo, cancellable, error)) goto out; + + in_transaction = FALSE; if (!ostree_repo_write_ref (repo, NULL, branch, commit_checksum, error)) goto out; @@ -293,11 +298,17 @@ ostree_builtin_commit (int argc, char **argv, GFile *repo_path, GError **error) if (!ostree_repo_abort_transaction (repo, cancellable, error)) goto out; + in_transaction = FALSE; + g_print ("%s\n", parent); } ret = TRUE; out: + if (in_transaction) + { + (void) ostree_repo_abort_transaction (repo, cancellable, NULL); + } if (metadata_builder_initialized) g_variant_builder_clear (&metadata_builder); g_clear_object (&arg); diff --git a/src/ostree/ot-builtin-compose.c b/src/ostree/ot-builtin-compose.c index 15e1bb88..3fc18b36 100644 --- a/src/ostree/ot-builtin-compose.c +++ b/src/ostree/ot-builtin-compose.c @@ -94,6 +94,7 @@ ostree_builtin_compose (int argc, char **argv, GFile *repo_path, GError **error) GFile *metadata_f = NULL; OstreeMutableTree *mtree = NULL; gboolean skip_commit = FALSE; + gboolean in_transaction = FALSE; int i; context = g_option_context_new ("BRANCH1 BRANCH2 ... - Merge multiple commits into a single commit tree"); @@ -136,6 +137,8 @@ ostree_builtin_compose (int argc, char **argv, GFile *repo_path, GError **error) if (!ostree_repo_prepare_transaction (repo, cancellable, error)) goto out; + in_transaction = TRUE; + mtree = ostree_mutable_tree_new (); if (recompose) @@ -224,6 +227,8 @@ ostree_builtin_compose (int argc, char **argv, GFile *repo_path, GError **error) if (!ostree_repo_commit_transaction (repo, cancellable, error)) goto out; + in_transaction = FALSE; + if (!ostree_repo_write_ref (repo, NULL, branch, commit_checksum, error)) goto out; } @@ -231,6 +236,8 @@ ostree_builtin_compose (int argc, char **argv, GFile *repo_path, GError **error) { if (!ostree_repo_abort_transaction (repo, cancellable, error)) goto out; + + in_transaction = FALSE; g_print ("%s\n", parent); } @@ -238,6 +245,11 @@ ostree_builtin_compose (int argc, char **argv, GFile *repo_path, GError **error) ret = TRUE; g_print ("%s\n", commit_checksum); out: + if (in_transaction) + { + (void) ostree_repo_abort_transaction (repo, cancellable, NULL); + } + if (compose_metadata_builder_initialized) g_variant_builder_clear (&compose_metadata_builder); if (commit_metadata_builder_initialized) -- 2.30.2